It is increasingly common for applications to use 3-dimensional (3D) visual objects. For example, documents may include video, 3D art with shading and other effects, complex object motion (e.g., a presentation slide transitions), and so forth. Many applications push the limits of what can be done graphically (in real-time) within the bounds of a software constrained rendering platform. In order to take the next leap in both rendering quality and performance, applications use hardware acceleration typically provided by a graphics-processing unit (GPU). By utilizing the power of the GPU, the ceiling for what the rendering platform can accomplish rises significantly. The GPU can provide improved rendering performance, allow for higher quality rendering of current effects, and enable rendering of new types of content. Applications increasingly rely on a hardware accelerated rendering pipeline for all 2D and 3D content (i.e., text, shapes, and effects) to simplify application logic, even those that can be satisfactorily rendered without hardware acceleration. Applications also use the hardware accelerated rendering pipeline for other rendering, such as printing application data to a printer or other device.
Many operating systems provide multiple ways to access video hardware. For example, Microsoft Windows provides a high-level graphical device interface (GDI) layer and a low-level Microsoft DirectX layer. The low-level layer provides enhanced graphics capabilities but also relies strongly on the hardware. In general, the high-level layer is software accelerated (e.g., does not make substantial use of the GPU) and the low-level layer is hardware accelerated (e.g., makes substantial use of the GPU). There can be significant differences in capabilities between software and hardware acceleration, including the availability of pixel shaders, vertex shaders, and anti-aliasing.
When utilizing the Graphics Processing Unit (GPU) for rendering, it is possible that the GPU may run into errors (e.g., drivers failing, running out of memory) that cause hardware accelerated rendering to fail. 3D hardware is often not reliable, particularly on older systems. Bad drivers, limited resources, and competing demands of applications can all lead to an unreliable experience. In addition, not all computer systems have GPUs that meet the requirements for hardware-accelerated rendering. Furthermore, there are a number of scenarios where rendering through hardware does not work due to limitations of the underlying operating system or other software (e.g., when the user locks his/her computer system).
However, certain applications (such as office productivity applications) have to be able to render in all these cases: when there is sufficient hardware, when the hardware fails, and when there is insufficient hardware. Most applications today address this issue by asking the user to manually switch between hardware accelerated and software rendering. Alternatively, application writers often avoid using advanced 3D functionality to appeal to the least common denominator of hardware capabilities. This leads to applications that underutilize the available hardware at the expense of providing a richer user experience.